package com.pubsys.main.shared.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;

import com.pubsys.main.shared.model.Monografia.TYPE_MONOGRAFIA;


public class Referencia implements Serializable{
	private static final long serialVersionUID = 4998521354936681403L;

//	@PrimaryKey
//	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Integer id;
	private ArrayList<Autor> autores; /* tbm � do Capitulo*/
//	private ArrayList<Autor> autoresDoLivro;  /*qndo a Ref for parte de Monografia*/
//	private ArrayList<Autor> tradutorRevisor; 	
	private String titulo;
//	private String tituloDoLivro;   /*qndo a Ref for parte de Monografia*/	
//	private String nomePeriodico;	
	private int ano;	
	private String local;	
	private Date dataPub;	
//	private Date dataAcesso;   /* se tiver pagina disponivel */	
	private String editora;	
//	private String instituicaoOndeDef;	
	private String edicao;	
	private String serie;	
	private String codigo;
//	@Persistent
//	private String colecao;   /* retirado */
	private String nroPaginas;	
	private String nroVolume; 	
//	private String fasciculo;	
//	private String paginacao;	
//	private String nroNorma;	
//	private String pagRef;    /* pagina referenciada */	
//	private String pagDisponivel;    /* pagina http */	
//	private String orgaoNormalizador;    	
//	private String tipoTrabIndividual;  
	
	public static enum TYPE {PROCEEDING, COLLENTION, BOOK, INPROCEEDING, INCOLLENTION, CHAPTER, INDIVIDUAL_WORK, DISSERTATION, THESIS, RFC, NORM};	
	private TYPE tipo;
	
	public static enum ABRANG {NACIONAL, INTERNACIONAL};	
	private ABRANG abrangencia;
	
	public static enum TYPE_COMP_RES {COMPLETA, RESUMIDA};	
	private TYPE_COMP_RES tipoComplResumida;
	
	public static enum TYPE_RESUMO {NONE, SIMPLES, EXPANDIDO};	
	private TYPE_RESUMO tipoResumo;


	
	public Referencia() {
		inicializaAtributos();
	}
	
	public Referencia(Monografia monografia) {
		/* inicializa atributos, mesmo os não usados*/
		inicializaAtributos();
		
		this.autores = monografia.getAutores();
		this.titulo = monografia.getTitulo();
		this.ano = monografia.getAno();
		this.local = monografia.getLocal();
		this.editora = monografia.getEditora();
		this.edicao = monografia.getEdicao();
//		this.tradutorRevisor = monografia.getTradutorRevisor();
		this.nroPaginas = monografia.getNroPag();
		this.nroVolume = monografia.getNroVol();
		this.serie = monografia.getSerie();
		this.codigo = monografia.getCodigo();
		this.dataPub = monografia.getDataPub();
//		this.pagDisponivel = monografia.getPaginaDisp();
//		this.dataAcesso = monografia.getDataAcesso();
		
		if(monografia.getTipoMonografia() == Monografia.TYPE_MONOGRAFIA.PROCEEDING) tipo = Referencia.TYPE.PROCEEDING;
		else if(monografia.getTipoMonografia() == Monografia.TYPE_MONOGRAFIA.COLLENTION) tipo = Referencia.TYPE.COLLENTION;
		else tipo = Referencia.TYPE.BOOK;
		
		this.abrangencia = monografia.getAbrangencia();
		this.tipoComplResumida = monografia.getTipoCR();
		this.tipoResumo = monografia.getTipoResumo();
	}
	
	private void inicializaAtributos(){
		this.autores = null;
//		this.autoresDoLivro = null;
//		this.tradutorRevisor = null;
		this.titulo = null;
//		this.tituloDoLivro = null;
//		this.nomePeriodico = null;
		this.ano = 0;
		this.local = null;
		this.dataPub = null;
//		this.dataAcesso = null;
		this.editora = null;
//		this.instituicaoOndeDef = null;
		this.edicao = null;
		this.serie = null;
		this.codigo = null;
		this.nroPaginas = null;
		this.nroVolume = null;
//		this.fasciculo = null;
//		this.paginacao = null;
//		this.nroNorma = null;
//		this.pagRef = null;
//		this.pagDisponivel = null;
//		this.orgaoNormalizador = null;
//		this.tipoTrabIndividual = null;
		
		this.tipo = TYPE.PROCEEDING;
		this.abrangencia = ABRANG.NACIONAL;
		this.tipoComplResumida= TYPE_COMP_RES.COMPLETA;
		this.tipoResumo = TYPE_RESUMO.NONE;
		
	}
	
	public ArrayList<Autor> getAutores() {
		return autores;
	}

	public void setAutores(ArrayList<Autor> autores) {
		this.autores = autores;
	}

	public void addAutor(Autor autor){
		if (this.autores == null){
			this.autores = new ArrayList<Autor>();
		}
		this.autores.add(autor);
	}
	
	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public int getAno() {
		return ano;
	}

	public void setAno(int ano) {
		this.ano = ano;
	}

	public String getLocal() {
		return local;
	}

	public void setLocal(String local) {
		this.local = local;
	}
	
	public void setTipo(TYPE tipo){
		this.tipo = tipo;
	}
	
	public TYPE getTipo(){
		return this.tipo;
	}
	
	public void setAbrangencia(ABRANG abrang){
		this.abrangencia = abrang;
	}
	
	public ABRANG getAbrangencia(){
		return this.abrangencia;
	}
	
	public void setTipoCompRes(TYPE_COMP_RES tipoAux){
		this.tipoComplResumida = tipoAux;
	}
	
	public TYPE_COMP_RES getTipoCompRes(){
		return this.tipoComplResumida;
	}
	
	public void setTipoResumo(TYPE_RESUMO tipoResumo){
		this.tipoResumo = tipoResumo;
	}
	
	public TYPE_RESUMO getTipoResumo(){
		return this.tipoResumo;
	}
	
	public void setDataPub(Date data){
		this.dataPub = data;
	}
	
	public Date getDataPub(){
		return this.dataPub;
	}
	
	
	/**
	 * Exemplo, tem que implementar ainda
	 * @return
	 */
	public String getFormatoABNT(){
		
		Monografia monografia = this.getMonografia();
		
		return monografia.getFormatoABNT();
	}

	public String getEditora() {
		return this.editora;
	}

	public void setEditora(String editora){
		this.editora = editora;
	}

	
	
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getCodigo() {
		return this.codigo;
	}
//	public void setAutoresDoLivro(ArrayList<Autor> autoresDoLivro) {
//		this.autoresDoLivro = autoresDoLivro;
//	}
//
//	public ArrayList<Autor> getAutoresDoLivro() {
//		return autoresDoLivro;
//	}

//	public void setTradutorRevisor(ArrayList<Autor> tradutorRevisor) {
//		this.tradutorRevisor = tradutorRevisor;
//	}
//
//	public ArrayList<Autor> getTradutorRevisor() {
//		return tradutorRevisor;
//	}
//
//	public void setTituloDoLivro(String tituloDoLivro) {
//		this.tituloDoLivro = tituloDoLivro;
//	}
//
//	public String getTituloDoLivro() {
//		return tituloDoLivro;
//	}
//
//	public void setNomePeriodico(String nomePeriodico) {
//		this.nomePeriodico = nomePeriodico;
//	}
//
//	public String getNomePeriodico() {
//		return nomePeriodico;
//	}
//
//	public void setDataAcesso(Date dataAcesso) {
//		this.dataAcesso = dataAcesso;
//	}
//
//	public Date getDataAcesso() {
//		return dataAcesso;
//	}
//
//	public void setInstituicaoOndeDef(String instituicaoOndeDef) {
//		this.instituicaoOndeDef = instituicaoOndeDef;
//	}
//
//	public String getInstituicaoOndeDef() {
//		return instituicaoOndeDef;
//	}

	public void setEdicao(String edicao) {
		this.edicao = edicao;
	}

	public String getEdicao() {
		return edicao;
	}

	public void setSerie(String serie) {
		this.serie = serie;
	}

	public String getSerie() {
		return serie;
	}

	public void setNroPaginas(String nroPaginas) {
		this.nroPaginas = nroPaginas;
	}

	public String getNroPaginas() {
		return nroPaginas;
	}

	public void setNroVolume(String nroVolume) {
		this.nroVolume = nroVolume;
	}

	public String getNroVolume() {
		return nroVolume;
	}

//	public void setFasciculo(String fasciculo) {
//		this.fasciculo = fasciculo;
//	}
//
//	public String getFasciculo() {
//		return fasciculo;
//	}
//
//	public void setPaginacao(String paginacao) {
//		this.paginacao = paginacao;
//	}
//
//	public String getPaginacao() {
//		return paginacao;
//	}
//
//	public void setNroNorma(String nroNorma) {
//		this.nroNorma = nroNorma;
//	}
//
//	public String getNroNorma() {
//		return nroNorma;
//	}
//
//	public void setPagRef(String pagRef) {
//		this.pagRef = pagRef;
//	}
//
//	public String getPagRef() {
//		return pagRef;
//	}
//
//	public void setPagDisponivel(String pagDisponivel) {
//		this.pagDisponivel = pagDisponivel;
//	}
//
//	public String getPagDisponivel() {
//		return pagDisponivel;
//	}
//
//	public void setOrgaoNormalizador(String orgaoNormalizador) {
//		this.orgaoNormalizador = orgaoNormalizador;
//	}
//
//	public String getOrgaoNormalizador() {
//		return orgaoNormalizador;
//	}
//
//	public void setTipoTrabIndividual(String tipoTrabIndividual) {
//		this.tipoTrabIndividual = tipoTrabIndividual;
//	}
//
//	public String getTipoTrabIndividual() {
//		return tipoTrabIndividual;
//	}


	public void setId(Integer id) {
		this.id = id;

	}

	public Integer getId() {
		return id;
	}
	
	private Monografia getMonografia(){
		TYPE_MONOGRAFIA tipoMonografia;
		if(this.tipo == TYPE.PROCEEDING ) tipoMonografia = TYPE_MONOGRAFIA.PROCEEDING; 
		else if(this.tipo == TYPE.COLLENTION) tipoMonografia = TYPE_MONOGRAFIA.COLLENTION; 
		else tipoMonografia = TYPE_MONOGRAFIA.BOOK; 
		
		Monografia monografia = new Monografia(this.titulo, this.autores, this.ano, this.local, this.edicao,
				this.editora, this.nroPaginas, this.nroVolume, this.serie,
				this.codigo, this.dataPub, 
				tipoMonografia , this.abrangencia, this.tipoComplResumida, this.tipoResumo);
		
		return monografia;
	}

}
